package com.mylater.nace.common;

import java.lang.reflect.Method;

/**
 * The JavaClassExecuter represents JavaClass 执行工具
 * @version $Id$
 * @author fengjiachun
 */
public class ClassExecuter {

	/**
	 * 执行外部传过来的代表一个Java类的Byte数组<br>
	 * 将输入类的byte数组中代表java.lang.System的CONSTANT_Utf8_info常量修改为劫持后的MySystem类
	 * 执行方法为该类的static main(String[] args)方法，输出结果为该类向System.out/err输出的信息
	 * @param classByte 代表一个Java类的Byte数组
	 * @return 执行结果
	 */
	public static String execute(byte[] classByte) {
		NaceSystem.clearBuffer();
		ClassModifier modifier = new ClassModifier(classByte);
		byte[] modiBytes = modifier.modifyUTF8Constant("java/lang/System", "com/mylater/nace/common/NaceSystem");
		ClassLoader loader = new ClassLoader();
		Class<?> clazz = loader.loadByte(modiBytes);
		try {
//			Method method = clazz.getMethod("run", new Class[] { String[].class });
//			method.invoke(null, new Object[] { null });
			Object o = clazz.newInstance();
			Method method = clazz.getMethod("run");
			method.invoke(o);
		} catch (Throwable e) {
			e.printStackTrace(NaceSystem.out);
		}
		String bufferString = NaceSystem.getBufferString();
		return bufferString;
	}

}
